home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 5 / Gekikoh Dennoh Club Vol. 5 (Japan).7z / Gekikoh Dennoh Club Vol. 5 (Japan) (Track 01).bin / internet / webx / jpged26s.lzh / Encode.s < prev    next >
Text File  |  1996-09-25  |  7KB  |  387 lines

  1. *
  2. *
  3. *  ENCODE.S
  4. *
  5. *  ânâtâ}âôòäìåë╗
  6. *
  7. include    DOSCALL.MAC
  8. include    JPEG.MAC
  9. include    work.inc
  10. *
  11.     .text
  12.     .xref    ZigzagL    'MES.S'
  13.     .xref    PrintWI    'Load.s'
  14.     .xref    PrintHex
  15.     .xref    CRLF
  16.  
  17.  
  18. ******************************************************************************
  19. *
  20. *    DCɼò¬┤▌║░─▐Åêù¥╧╕█
  21. *
  22. *        âWâOâUâOâXâLâââô
  23. *        ù╩Äqë╗
  24. *        æOë±é╠écébÆlé╞é╠ì╖é≡ĵéΘ
  25. *    
  26. ******************************************************************************
  27. ENCODE_DC    macro
  28.  
  29. *âWâOâUâOâXâLâââôé╞ù╩Äqë╗
  30. *-----------------------
  31.     move.w    (a5)+,d4    *QtableÆlô╟é▌ì₧é▌
  32.     move.w  d4,d3
  33.     lsr.w    #1,d3
  34.     move.w    (a0),d0    *ù╩Äqë╗æOé╠écébÆl
  35.     bmi    1f
  36.     add.w    d3,d0    *É│é╚éτÅñé╔+0.5
  37.     moveq.l    #0,d3
  38. 1:
  39.     sub.w    d3,d0    *òëé╚éτÅñé╔-0.5
  40.     ext.l    d0
  41.     divs    d4,d0        * d0.w = ìíë±é╠écéb
  42.  *æOë±é╠écébÆlé╞é╠ì╖é≡ĵéΘ
  43.  *------------------------
  44.     move.w    (a1),d1  * æOë±é╠écéb
  45.     move.w    d0,(a1)
  46.     moveq.l    #0,d2
  47.     sub.w    d1,d0
  48.     beq    3f
  49.     move.w    d0,d1
  50.     bpl    2f
  51.     neg.w    d1
  52.     subq.w    #1,d0
  53. 2:
  54.     addq.w    #4,d2
  55.     lsr.w    #1,d1
  56.     bne    2b
  57. 3:
  58.     endm
  59.  
  60. ******************************************************************************
  61. *
  62. *    ACɼò¬┤▌║░─▐Åêù¥╧╕█
  63. *
  64. *        âWâOâUâOâXâLâââô
  65. *        ù╩Äqë╗
  66. *        éOé╠î┬Éö╢│▌─
  67. *        EOB,ZRL┴¬»╕
  68. ******************************************************************************
  69. ENCODE_AC    macro    SubAC,SubACZRL,SubACEOB
  70.         local    ac10,ac20,ac50,ac90
  71.  
  72.     lea.l    ACLtable-DCLtable(a2),a2
  73.     lea.l    ZigzagL(pc),a1
  74.     moveq.l    #63-1,d2
  75. ac10
  76.     move.w    d2,d1  * RUN
  77. ac20
  78. *âWâOâUâOâXâLâââôé╞ù╩Äqë╗
  79. *-----------------------
  80.     move.w    (a5)+,d4        *QtableÆlô╟é▌ì₧é▌
  81.      move.w    d4,d3
  82.     lsr.w    #1,d3
  83.     adda.w    (a1)+,a0        *Zigzag├░╠▐┘ô╟é▌ì₧é▌
  84.     move.w    (a0),d0
  85.     *żÉöô_ê╚ë║ÄlÄ╠î▄ôⁿ
  86.     *---------------
  87.     bmi    @f
  88.     add.w    d3,d0
  89.     moveq.l    #0,d3
  90. @@
  91.     sub.w    d3,d0
  92.  
  93.     ext.l    d0
  94.     divs.w    d4,d0
  95.  
  96.     *éOé╠î┬ÉöâJâEâôâg
  97.     *-----------------------
  98.     bne    ac50
  99.     dbra    d2,ac20
  100.     bsr    SubACEOB * EOB
  101.     bra    ac90
  102.  
  103.     *éOê╚èOé╠é`ébÆlé¬Åoé─é½é╜
  104.     *-------------------
  105. ac50
  106.     move.w    d0,-(sp) * AC
  107.     sub.w    d2,d1
  108. @@
  109.     cmp.w    #15,d1
  110.     bls    @f
  111.     bsr    SubACZRL * ZRL
  112.         sub.w   #16,d1
  113.         bra     @b
  114. @@
  115.     move.w    d1,-(sp) * Run
  116.     bsr    SubAC
  117.     addq.l    #4,sp
  118.     dbra    d2,ac10
  119. *
  120. ac90
  121.     endm
  122. *
  123. *
  124. *ü@ânâtâ}âôòäìåì┼ôKë╗é╠é╜é▀üAèeÆlé╠Åoî╗öΣùªîvæ¬
  125. *
  126. *    a0.l    âfü[â^ù╠êµ
  127. *    a1.l    æOë±é╠écébù╠êµüiÄgùpîπé═üAZigzag├░╠▐┘âAâhâîâX)
  128. *    a2.l    écébâRü[âhò\
  129. *    a5.l    QtableâAâhâîâX
  130. .xdef ENCODE1
  131. ENCODE1
  132.     ENCODE_DC
  133.     add.w    d2,d2
  134.     addq.l    #1,(a2,d2.w)     *èe╦▐»─Æ╖é╠Åoî╗ùªé≡ë┴ÄZ
  135.     ENCODE_AC countAC,countACZRL,countACEOB
  136.     moveq.l    #0,d0
  137.     rts
  138.  
  139. ******** ZRL
  140. countACZRL
  141.     addq.l    #1,15*16*8(a2)     *èe╦▐»─Æ╖é╠Åoî╗ùªé≡ë┴ÄZ
  142.     rts
  143. ******** EOB
  144. countACEOB
  145.     addq.l    #1,(a2)     *èe╦▐»─Æ╖é╠Åoî╗ùªé≡ë┴ÄZ
  146.     rts
  147.  
  148. *    pushw  AC(w)
  149. *    pushw  RUN(w)
  150. countAC
  151.     move.w    4(sp),d0
  152.     lsl.w    #7,d0
  153.     move.w    6(sp),d1 * AC
  154.     bpl    @f
  155.     neg.w    d1
  156. @@
  157.     addq.w    #8,d0
  158.     lsr.w    #1,d1
  159.     bne    @b
  160.     addq.l  #1,0(a2,d0.w)
  161.     rts
  162. *
  163. *
  164. *
  165. *  ânâtâ}âôòäìåÅoù═
  166. *
  167. *
  168. *    a0.l    âfü[â^ù╠êµ
  169. *    a1.l    æOë±é╠écébù╠êµüiÄgùpîπé═üAZigzag├░╠▐┘âAâhâîâX)
  170. *    a2.l    écébâRü[âhò\
  171. *    a4.l    âoâbâtâ@ü[âAâhâîâX
  172. *    a5.l    QtableâAâhâîâX
  173. *
  174. *    d7.w    ndata    âoâbâtâ@ü[ôαâfü[â^Éö
  175. *    d6.w    rlen    ÄcéΦârâbâgÆ╖
  176. *    d5.l    Åπê╩âÅü[âh rdata
  177. *            ÄcéΦâfü[â^
  178. *
  179. *
  180. .xdef ENCODE
  181. ENCODE
  182.     tst.w    EncodePath(a6)
  183.     bnz    ENCODE1
  184.  
  185. *Åæé½ì₧é▌╩▐»╠ºÉºîΣ┌╝▐╜└ò£ïA
  186. *------------------------
  187.     move.w    LastBufSize(a6),d7
  188.     move.w    rlen(a6),d6
  189.     move.w    rdata(a6),d5
  190.     swap    d5
  191.     move.l    bufadr(a6),a4
  192. *  écébɼò¬é╠Åoù═
  193. *-------------------------
  194.     ENCODE_DC
  195.     move.w    0(a2,d2.w),d5  * code
  196.     move.w    2(a2,d2.w),d4  * length
  197.     bsr    PutC
  198.     lsr.w    #2,d2
  199.     beq    dc_end
  200.     moveq.l    #16,d1
  201.     sub.w    d2,d1
  202.     lsl.w    d1,d0
  203.     move.w    d0,d5
  204.     move.w    d2,d4
  205.     bsr    PutC
  206. dc_end
  207.  
  208. *  é`ébɼò¬é╠Åoù═
  209. *------------------------
  210.     ENCODE_AC PutAC,PutACZRL,PutACEOB
  211.  
  212. *Åæé½ì₧é▌╩▐»╠ºÉºîΣ┌╝▐╜└ò█æ╢
  213. *------------------------
  214.     move.l    a4,bufadr(a6)
  215.     swap    d5
  216.     move.w    d5,rdata(a6)
  217.     move.w    d6,rlen(a6)
  218.     move.w    d7,LastBufSize(a6)
  219.     move.l    errflg(a6),d0 
  220.     rts
  221. *
  222. *  é`ébÅoù═òΓÅòÅoù═
  223. *
  224. *    a3.l Huffman Table
  225. *
  226. ******** ZRL
  227. PutACZRL
  228.     move.w    15*16*4(a2),d5
  229.     move.w    15*16*4+2(a2),d4
  230.     bra    PutC
  231. ******** EOB
  232. PutACEOB
  233.     move.w    (a2),d5
  234.     move.w    2(a2),d4
  235.     bra    PutC
  236.  
  237. ********
  238. *    pushw  AC(w)
  239. *    pushw  RUN(w)
  240. PutAC
  241.   move.l  d2,-(sp)
  242.   moveq.l #0,d2
  243.   move.w  10(sp),d0 * AC
  244.   move.w  d0,d1
  245.   bpl     @f
  246.     subq.w  #1,d0
  247.     neg.w   d1
  248. @@
  249.       addq.w  #4,d2
  250.     lsr.w   #1,d1
  251.     bne     @b
  252.  
  253.   move.w  8(sp),d3
  254.   lsl.w   #6,d3
  255.   add.w   d2,d3
  256.   move.w  0(a2,d3.w),d5 * code
  257.   move.w  2(a2,d3.w),d4 * length
  258.   bsr     PutC
  259.   lsr.w   #2,d2
  260.   moveq.l #16,d3
  261.   sub.w   d2,d3
  262.   lsl.w   d3,d0
  263.   move.w  d0,d5
  264.   move.w  d2,d4
  265.   move.l (sp)+,d2
  266. *
  267. *  âRü[âhÅoù═
  268. *    d5.w    code(w)
  269. *    d4.w    lengh(w)
  270. *
  271. PutC
  272.     cmp.w    d4,d6
  273.     bls    putc50
  274.  
  275.     ***** Åoù═é╚é╡
  276.     lsl.l    d4,d5
  277.     sub.w    d4,d6
  278.     rts
  279.  
  280. putc50
  281.     lsl.l    d6,d5
  282.     sub.w    d6,d4
  283.     moveq.l    #8,d6
  284.     bsr    PutB
  285. *
  286. putc60
  287.     cmp.w    d6,d4
  288.     bcs    putc70
  289.     lsl.l    d6,d5
  290.     sub.w    d6,d4
  291.     bsr    PutB
  292.     bra    putc60
  293. putc70
  294.     lsl.l   d4,d5
  295.     sub.w    d4,d6
  296.     rts
  297. *
  298. *  d5.l:l ôⁿù═âfü[â^üBÅπê╩âÅü[âhÅoù═
  299. *
  300. PutB
  301.  
  302.   swap    d5
  303.   cmp.b   #$FF,d5
  304.   bne     putb20
  305.     move.b  d5,(a4)+
  306.     clr.w   d5
  307.     dbra    d7,putb20
  308.     move.l  d0,-(sp)
  309.     move.l  buf_size(a6),d7
  310.     move.l  d7,-(sp)
  311.     subq.l  #1,d7
  312.     move.l  buf_adrs(a6),a4
  313.     move.l  a4,-(sp)
  314.     move.w  Jhandle(a6),-(sp)
  315.     dos     _WRITE
  316.     move.l  d0,errflg(a6) * I/O error
  317.     lea     10(sp),sp
  318.     move.l  (sp)+,d0
  319.  
  320. putb20
  321.   move.b  d5,(a4)+
  322.   dbra    d7,putb80
  323.     move.l  d0,-(sp)
  324.     move.l  buf_size(a6),d7
  325.     move.l  d7,-(sp)
  326.     subq.l  #1,d7
  327.     move.l  buf_adrs(a6),a4
  328.     move.l  a4,-(sp)
  329.     move.w  Jhandle(a6),-(sp)
  330.     dos     _WRITE
  331.     move.l  d0,errflg(a6) * I/O error
  332.     lea     10(sp),sp
  333.     move.l  (sp)+,d0
  334. putb80
  335.   swap    d5
  336.   rts
  337. *
  338. *  d0.w  Handle
  339. *
  340. *
  341. .xdef   preENCODE
  342. preENCODE
  343.   clr.l   errflg(a6) * I/O error flag
  344.   clr.w   preDC(a6)
  345.   clr.l   preDC+2(a6)
  346.  
  347.   clr.w   rdata(a6)
  348.   move.w  #8,rlen(a6)
  349.   move.l  buf_size(a6),d0
  350.   subq.l  #1,d0
  351.   move.w  d0,LastBufSize(a6)
  352.   move.l  buf_adrs(a6),bufadr(a6)
  353.  
  354.   rts
  355. *
  356. .xdef    postENCODE
  357. postENCODE
  358.   movem.l d1/a0,-(sp)
  359.   move.l  bufadr(a6),a4
  360.   moveq.l #0,d7
  361.   move.w  LastBufSize(a6),d7
  362.   move.w  rlen(a6),d1
  363.   cmp.w   #8,d1 
  364.   beq     postEncode50
  365.     moveq.l #-1,d0
  366.     move.w  rdata(a6),d0
  367.     rol.l   d1,d0
  368.     move.b  d0,(a4)+
  369.     subq.w  #1,d7
  370. postEncode50
  371.     move.l  buf_size(a6),d0
  372.     subq.l  #1,d0
  373.     sub.l   d7,d0
  374.   beq     postEncode90
  375.     move.l  d0,-(sp)
  376.     move.l  buf_adrs(a6),-(sp)
  377.     move.w  Jhandle(a6),-(sp)
  378.     dos     _WRITE
  379.     move.l  d0,errflg(a6) * I/O error
  380.     lea     10(sp),sp
  381. postEncode90
  382.   movem.l (sp)+,d1/a0
  383.   move.l  errflg(a6),d0
  384.   rts
  385. *
  386.   .end
  387.